CXX           = g++
CXXFLAGS      = -fopenmp -O3 -Wall -Wno-long-long -pedantic
DIR           = ../../build/parallel
OUT_FILE	  = mi-pap
OBJS          = $(DIR)/array.o \
				$(DIR)/bitonicsort.o \
                $(DIR)/bubblesort.o \
                $(DIR)/evenoddmergesort.o \
                $(DIR)/main.o \
                $(DIR)/shearsort.o \
                $(DIR)/sortingalgorithm.o

run: build
	$(DIR)/$(OUT_FILE) $(ARGS)

build: $(OBJS)
	$(CXX) $(CXXFLAGS) $(OBJS) -o $(DIR)/$(OUT_FILE)
  
$(DIR)/main.o: $(DIR) main.cpp \
		array.h \
		bitonicsort.h \
		bubblesort.h \
		shearsort.h \
		sortingalgorithm.h
	$(CXX) -c $(CXXFLAGS) -o $(DIR)/main.o main.cpp
	
$(DIR)/array.o: $(DIR) array.h \
		array.cpp
	$(CXX) -c $(CXXFLAGS) -o $(DIR)/array.o array.cpp
	
$(DIR)/bitonicsort.o: $(DIR) bitonicsort.h \
		bitonicsort.cpp \
		sortingalgorithm.h \
		array.h
	$(CXX) -c $(CXXFLAGS) -o $(DIR)/bitonicsort.o bitonicsort.cpp
	
$(DIR)/bubblesort.o: $(DIR) bubblesort.h \
		bubblesort.cpp \
		sortingalgorithm.h \
		array.h
	$(CXX) -c $(CXXFLAGS) -o $(DIR)/bubblesort.o bubblesort.cpp

$(DIR)/evenoddmergesort.o: $(DIR) evenoddmergesort.h \
		evenoddmergesort.cpp \
		sortingalgorithm.h \
		array.h
	$(CXX) -c $(CXXFLAGS) -o $(DIR)/evenoddmergesort.o evenoddmergesort.cpp
	
$(DIR)/shearsort.o: $(DIR) shearsort.h \
		shearsort.cpp \
		sortingalgorithm.h \
		$(DIR)/bubblesort.o \
		array.h
	$(CXX) -c $(CXXFLAGS) -o $(DIR)/shearsort.o shearsort.cpp
	
$(DIR)/sortingalgorithm.o: $(DIR) sortingalgorithm.h \
		sortingalgorithm.cpp 
	$(CXX) -c $(CXXFLAGS) -o $(DIR)/sortingalgorithm.o sortingalgorithm.cpp
	
$(DIR):
	mkdir $(DIR)
  
clean:
	rm -r $(DIR)
